package mx.ipn.negocios.empleado;

import mx.ipn.negocios.CodigosDeError;
import mx.ipn.negocios.ConexionConPersistencia;
import mx.ipn.to.*;

public class PuestoBO {

	public static PuestoTO[] obtenerPuestosActivos() {
		return (PuestoTO[]) ConexionConPersistencia.invocaServicio(
				"seleccionarPuestosActivos", PuestoTO[].class);
	}

	public static TipoEmpleadoTO[] obtenerTiposdeEmpleado() {
		return (TipoEmpleadoTO[]) ConexionConPersistencia.invocaServicio(
				"seleccionarTiposdeEmpleado", TipoEmpleadoTO[].class);
	}

	public static PuestoTO obtenerPuestoActivoporTipoEmpleado(
			short idTipoEmpleado) {
		return (PuestoTO) ConexionConPersistencia.invocaServicio(
				"seleccionarPuestoActivoporTipoEmpleado", idTipoEmpleado,
				PuestoTO.class);
	}

	public static PuestoTO encontrarPuestoporIdPuesto(short idPuesto) {
		return (PuestoTO) ConexionConPersistencia.invocaServicio(
				"encontrarPuestoporIdPuesto", idPuesto, PuestoTO.class);
	}

	public static PuestoTO[] buscarFiltrarPuestos(Puesto2TO puestoTO) {

		java.util.ArrayList<PuestoTO> coleccion = new java.util.ArrayList<PuestoTO>();
		PuestoTO[] resultado;
		for (int x = 0; x < puestoTO.getPuestoTO().length; x++) {
			if (puestoTO.getPuestoTO()[x].getTipoEmpleadoTO()
					.getIdTipoEmpleado() == puestoTO.getIdTipoEmpleado()) {
				coleccion.add(puestoTO.getPuestoTO()[x]);
			}

		}
		if (coleccion.size() == 0) {
			PuestoTO aux = new PuestoTO();
			aux.setTipoError(3);
			aux.setError(CodigosDeError.error.get(30001));
			resultado = new PuestoTO[1];
			resultado[0] = aux;
		} else {
			resultado = (PuestoTO[]) coleccion.toArray(new PuestoTO[coleccion
					.size()]);
		}
		return resultado;
	}

	public static PuestoTO agregarPuesto(PuestoTO puestoTO) {

		boolean res;
		PuestoTO puesto2TO = null;
		puesto2TO = (PuestoTO) ConexionConPersistencia.invocaServicio(
				"obtenerPuestoporNombreIdTipoEmp", puestoTO, PuestoTO.class);
		if (puesto2TO == null) {
			res = (Boolean) ConexionConPersistencia.invocaServicio(
					"agregarPuesto", puestoTO, Boolean.class);
			if (res == false) {
				puestoTO.setTipoError(TransferObject.ERROR);
				puestoTO.setError(CodigosDeError.error.get(30003));
			}
		} else {
			puestoTO.setTipoError(TransferObject.ERROR);
			puestoTO.setError(CodigosDeError.error.get(30002));
		}

		return puestoTO;
	}

	public static PuestoTO modificarPuesto(Puesto2TO puestoTO) {

		short res;
		PuestoTO puesto2TO = new PuestoTO();
		if (puestoTO.getPuestoTO()[0].getNombre().compareTo(
				puestoTO.getPuestoTO()[1].getNombre()) != 0
				|| puestoTO.getPuestoTO()[0].getTipoEmpleadoTO()
						.getIdTipoEmpleado() != puestoTO.getPuestoTO()[1]
						.getTipoEmpleadoTO().getIdTipoEmpleado()) {

			puesto2TO.setNombre(puestoTO.getPuestoTO()[1].getNombre());
			puesto2TO.setTipoEmpleadoTO(puestoTO.getPuestoTO()[1]
					.getTipoEmpleadoTO());

			puesto2TO = (PuestoTO) ConexionConPersistencia.invocaServicio("obtenerPuestoporNombreIdTipoEmp", puesto2TO, PuestoTO.class); 

			if (puesto2TO == null) {
				res = (Short) ConexionConPersistencia.invocaServicio("modificarPuesto", puestoTO.getPuestoTO()[1], Short.class);
				
				if (res != 1) {
					puesto2TO.setTipoError(TransferObject.ERROR);
					puesto2TO.setError(CodigosDeError.error.get(30006));
				} else {
					puesto2TO = new PuestoTO();
					puesto2TO.setError(CodigosDeError.error.get(30007));
				}
			} else {
				puesto2TO.setTipoError(TransferObject.ERROR);
				puesto2TO.setError(CodigosDeError.error.get(30005));
			}
		} else {
			if (puestoTO.getPuestoTO()[0].getDescripcion().compareTo(
					puestoTO.getPuestoTO()[1].getDescripcion()) != 0) {
				res = (Short) ConexionConPersistencia.invocaServicio("modificarPuesto", puestoTO.getPuestoTO()[1], Short.class); 
				
				if (res != 1) {
					puesto2TO.setTipoError(TransferObject.ERROR);
					puesto2TO.setError(CodigosDeError.error.get(30006));
				} else {
					puesto2TO = new PuestoTO();
					puesto2TO.setError(CodigosDeError.error.get(30007));
				}

			} else {
				puesto2TO.setTipoError(TransferObject.INFO);
				puesto2TO.setError(CodigosDeError.error.get(30004));
			}
		}

		return puesto2TO;
	}
	
	public static PuestoTO bajaPuesto(short idPuesto) {

		short res;
		PuestoTO puesto2TO = new PuestoTO();
		res = (Short) ConexionConPersistencia.invocaServicio("bajaPuesto", idPuesto, Short.class);
				
				if (res != 1) {
					puesto2TO.setTipoError(TransferObject.ERROR);
					puesto2TO.setError(CodigosDeError.error.get(30008));
				} else {
					puesto2TO = new PuestoTO();
					puesto2TO.setError(CodigosDeError.error.get(30009));
				}
			

		return puesto2TO;
	}
}
